package models

import (
	"crypto/md5"
	"fmt"
	"io"
	"time"

	"gopkg.in/mgo.v2/bson"
)

// 用户
type User struct {
	ID            string `bson:"id,omitempty"  json:"id,omitempty"`
	Username      string `bson:"username"   json:"username"  form:"username"`
	Password      string `bson:"password"   json:"password"  form:"password"` // MD5(id+原文)
	IsSupperAdmin int    `bson:"isSupperAdmin"   json:"isSupperAdmin"`        //是否默认
	Nickname      string `bson:"nickname"   json:"nickname"`
	Gender        int    `bson:"gender"   json:"gender"` //性别 1:男 ,0:女
	Authority     string `bson:"authority"   json:"authority"`
	Avatar        string `bson:"avatar"   json:"avatar"`
	Session       string `bson:"session"   json:"session"`
	CreateDate    string `bson:"createDate"   json:"createDate"`
	EditUser      string `bson:"editUser"   json:"editUser"` //修改人
}

// SetupInitValues 设置缺失的字段的值
func (e *User) SetupInitValues() {
	e.CreateDate = ToString(time.Now())
	e.ID = bson.NewObjectId().Hex()
	e.IsSupperAdmin = 0
	e.Gender = 1
}

// 设置加密过的密码,算法: MD5(密码原文+ID)
func (e *User) SetupPassword(plainPassword string) {

	w := md5.New()
	io.WriteString(w, plainPassword+e.ID)    //将str写入到w中
	md5str2 := fmt.Sprintf("%x", w.Sum(nil)) //w.Sum(nil)将w的hash转成[]byte格式
	e.Password = md5str2

}

// 检查密码是否一致
func (e *User) CheckUserPassword(plainPassword string) bool {

	w := md5.New()
	io.WriteString(w, plainPassword+e.ID)    //将str写入到w中
	md5str2 := fmt.Sprintf("%x", w.Sum(nil)) //w.Sum(nil)将w的hash转成[]byte格式

	//兼容明文 和 密文
	if e.Password == md5str2 || plainPassword == e.Password {
		return true
	}
	return false
}
